package it.unicam.ids.pvm.distributore;

/**
 * La classe rappresenta un prodotto venduto dal 
 * distributore automatico. Al momento dell'acquisto esso 
 * è presente in una casella e può essere acquistato 
 * o aggiunto da un operatore. Contiene i seguenti attributi:
 * descrizione, descrive di quale prodotto si tratta;
 * codice, codice univoco per ogni prodotto;
 * ingredienti, lista degli ingredienti del prodotto;
 * prezzo, prezzo di vendita del prodotto;
 * valoriNutrizionali, valori nutrizionali del prodotto;
 * promozione, eventuale sconto attribuito al prodotto.
 * @author Luca Iachini, Valerio Iachini, Alessandro Cardenà
 *
 */
public class Prodotto {
	
    private String descrizione;
    private String codice;
    private String ingredienti;
    private double prezzo;
    private String valoriNutrizionali;
    private double promozione;
    
    /**
     * Costruttore della classe.
     * Inizializza il codice ed il prezzo del prodotto.
     * @param codice.
     * @param prezzo.
     * @throws Exception.
     */
    
    public Prodotto(String codice, double prezzo) throws Exception{
            this.codice = codice;
            setPrezzo(prezzo);
    }
    
    /**
     * Costruttore della classe.
     * Inizializza codice, prezzo e descrizione 
     * del prodotto.
     * @param codice.
     * @param prezzo.
     * @param descrizione.
     * @throws Exception.
     */
    
    public Prodotto(String codice,double prezzo, String descrizione) throws Exception{
            this(codice,prezzo);
            this.descrizione = descrizione;
    }

    /**
     * Il metodo restituisce la descrizione del 
     * prodotto in questione.
     * @return descrizione.
     */
    
    public String getDescrizione() {
            return descrizione;
    }
    
    /**
     * Il metodo imposta la descrizione per il 
     * prodotto in questione.
     * @param descrizione.
     */
    
    public void setDescrizione( String descrizione){
            this.descrizione = descrizione;
    }
    
    /**
     * Il metodo restituisce il codice del prodotto 
     * in questione.
     * @return codice.
     */

    public String getCodice() {
            return codice;
    }
    
    /**
     * Il metodo imposta il valore del codice del 
     * prodotto in questione.
     * @param codice.
     */
    
    public void setCodice(String codice){
    	this.codice=codice;
    }
    
    /**
     * Il metodo restituisce gli ingredienti del 
     * prodotto in questione.
     * @return ingredienti.
     */
    

    public String getIngredienti() {
            return ingredienti;
    }
    
    /**
     * Il metodo restituisce il prezzo del 
     * prodotto in questione.
     * @return prezzo.
     */

    public double getPrezzo() {
            return prezzo;
    }
    
    /**
     * Il metodo imposta il prezzo del 
     * prodotto in questione. 
     * @param prezzo.
     * @throws Exception messaggio d'errore relativo 
     * 						al valore del prezzo.
     */
    
    public void setPrezzo(double prezzo)throws Exception{
            if(prezzo > 0){
                    this.prezzo = prezzo;
            }else
                    throw new Exception("Il prezzo deve essere maggiore di 0"); //TODO
    }

    /**
     * Il metodo restituisce lo sconto associato 
     * al prodotto in  questione.
     * @return promozione valore dello sconto.
     */
    
    public double getPromozione() {
            return promozione;
    }

    /**
     * Il metodo imposta il valore dello sconto da 
     * applicare al prodotto in questione.
     * @param promozione valore dello sconto.
     * @throws Exception messaggio d'errore relativo 
     * 						al valore dello sconto.
     */
    
	public void setPromozine(double promozione) throws Exception{
    	if(promozione>=0 && promozione<=1)
    		this.promozione=promozione;
    	else
    		throw new Exception("valore promozione non valido");//TODO
    }
	
	/**
	 * Il metodo restituisce i valori nutrizionali del 
	 * prodotto in questione.
	 * @return valoriNutrizionali.
	 */

    public String getValoriNutrizionali() {
            return valoriNutrizionali;
    }
    
    /**
     * Il metodo imposta i valori nutrizionali del 
     * prodotto in questione.
     * @param valoriNutrizionali.
     */
    
    public void setValoriNutrizionali(String valoriNutrizionali){
    	this.valoriNutrizionali=valoriNutrizionali;
    }
    
    /**
     * Il metodo imposta gli ingredienti del 
     * prodotto in questione.
     * @param ingredienti.
     */
    
	public void setIngredienti(String ingredienti) {
		this.ingredienti = ingredienti;
	}
	
}